机器学习模型优缺点对比

您所在的位置:网站首页 svm 优点 机器学习模型优缺点对比

机器学习模型优缺点对比

2023-03-26 07:15| 来源: 网络整理| 查看: 265

本文主要回顾下几个常用算法的适应场景及其优缺点!

机器学习算法太多了,分类、回归、聚类、推荐、图像识别领域等等,要想找到一个合适算法真的不容易,所以在实际应用中,我们一般都是采用启发式学习方式来实验。通常最开始我们都会选择大家普遍认同的算法,诸如SVM,GBDT,Adaboost,现在深度学习很火热,神经网络也是一个不错的选择。假如你在乎精度(accuracy)的话,最好的方法就是通过交叉验证(cross-validation)对各个算法一个个地进行测试,进行比较,然后调整参数确保每个算法达到最优解,最后选择最好的一个。但是如果你只是在寻找一个“足够好”的算法来解决你的问题,或者这里有些技巧可以参考,下面来分析下各个算法的优缺点,基于算法的优缺点,更易于我们去选择它。

机器学习求解步骤偏差vs方差

在统计学中,一个模型好坏,是根据偏差和方差来衡量的,所以我们先来普及一下偏差和方差:

偏差(Bias)和方差(Variance)是机器学习模型中两个重要的概念,它们是评估模型的泛化能力的重要指标。

偏差是指模型的预测值与实际值之间的差异,它反映了模型的拟合能力偏差较大的模型可能过于简单,无法捕捉到数据中的复杂性,导致欠拟合(underfitting)的问题

方差是指模型预测值的变化范围,它反映了模型的泛化能力方差较大的模型可能过于复杂,对训练数据过度拟合,导致过拟合(overfitting)的问题

模型的泛化误差(generalization error)可以表示为偏差的平方加上方差和噪声的和。这个公式也被称为“偏差-方差分解”(Bias-Variance Decomposition)。

为了得到一个具有较好的泛化能力的模型,需要平衡偏差和方差。通常采用的方法是通过交叉验证等技术来选择合适的模型复杂度,或者采用正则化等方法来限制模型复杂度,以降低方差。

当模型复杂度上升的时候,偏差会逐渐变小,而方差会逐渐变大。

以下内容引自知乎:

首先,假设你知道训练集和测试集的关系。简单来讲是我们要在训练集上学习一个模型,然后拿到测试集去用,效果好不好要根据测试集的错误率来衡量。但很多时候,我们只能假设测试集和训练集的是符合同一个数据分布的,但却拿不到真正的测试数据。这时候怎么在只看到训练错误率的情况下,去衡量测试错误率呢?由于训练样本很少(至少不足够多),所以通过训练集得到的模型,总不是真正正确的。(就算在训练集上正确率100%,也不能说明它刻画了真实的数据分布,要知道刻画真实的数据分布才是我们的目的,而不是只刻画训练集的有限的数据点)。而且,实际中,训练样本往往还有一定的噪音误差,所以如果太追求在训练集上的完美而采用一个很复杂的模型,会使得模型把训练集里面的误差都当成了真实的数据分布特征,从而得到错误的数据分布估计。这样的话,到了真正的测试集上就错的一塌糊涂了(这种现象叫过拟合)。但是也不能用太简单的模型,否则在数据分布比较复杂的时候,模型就不足以刻画数据分布了(体现为连在训练集上的错误率都很高,这种现象较欠拟合)。过拟合表明采用的模型比真实的数据分布更复杂,而欠拟合表示采用的模型比真实的数据分布要简单。在统计学习框架下,大家刻画模型复杂度的时候,有这么个观点,认为Error = Bias + Variance。这里的Error大概可以理解为模型的预测错误率,是有两部分组成的,一部分是由于模型太简单而带来的估计不准确的部分(Bias),另一部分是由于模型太复杂而带来的更大的变化空间和不确定性(Variance)。所以,这样就容易分析朴素贝叶斯了。它简单的假设了各个数据之间是无关的,是一个被严重简化了的模型。所以,对于这样一个简单模型,大部分场合都会Bias部分大于Variance部分,也就是说高偏差而低方差。在实际中,为了让Error尽量小,我们在选择模型的时候需要平衡Bias和Variance所占的比例,也就是平衡over-fitting和under-fitting。

偏差和方差与模型复杂度的关系使用下图更加明了:

常见算法优缺点1、朴素贝叶斯

朴素贝叶斯分类器是一种基于贝叶斯定理的分类算法,它假设所有特征之间相互独立,因此被称为“朴素贝叶斯”分类器。它的主要思想是通过已知的标记数据集来估计每个特征值在不同分类下的条件概率,并利用贝叶斯定理来计算新样本属于每个类别的概率,最终将新样本分类到概率最大的那个类别。

具体而言,对于一个新样本,朴素贝叶斯分类器首先计算每个类别的先验概率,即在训练集中每个类别的样本数占总样本数的比例。然后,对于每个特征,计算在该特征下,每个类别的条件概率,即对于给定的特征值,该样本属于某个类别的概率。最后,利用贝叶斯定理,根据先验概率和条件概率计算新样本属于每个类别的后验概率,将新样本分类到后验概率最大的那个类别。

朴素贝叶斯分类器的优点是模型简单、计算效率高,在处理大规模数据时表现良好,并且对于噪声数据有一定的鲁棒性。但是它的缺点是假设特征之间相互独立,这在实际应用中很难满足,因此可能导致分类效果不够准确。

特征要求:

适用于数值型和标称型数据不需要处理缺失值不需要标准化不需要归一化需要把特征离散化

优点

朴素贝叶斯模型发源于古典数学理论,有着坚实的数学基础,以及稳定的分类效率。对小规模的数据表现很好,能个处理多分类任务,适合增量式训练;对缺失数据不太敏感,算法也比较简单,常用于文本分类。

缺点

需要计算先验概率;分类决策存在错误率;对输入数据的表达形式很敏感。2、Logistic Regression(逻辑回归)

逻辑回归,也称为逻辑斯蒂回归,是一种二分类的机器学习算法。它的主要目的是预测一个事物属于两个类别中的哪一个。逻辑回归假设输入变量和输出变量之间存在某种非线性关系,通过一个数学函数将输入变量映射到输出变量的概率。

逻辑回归的思想非常简单,它利用sigmoid函数将输入数据映射到0-1之间的概率值,然后根据概率值判断输入数据属于哪个类别。在训练过程中,逻辑回归会根据给定的输入数据和标签,通过最大化似然函数的方法来求出最优的参数。

逻辑回归广泛应用于各种领域,例如金融、医疗、广告等。它可以用于预测客户是否会购买某个产品,判断肿瘤是恶性还是良性,甚至可以用于预测选民的投票意向。

虽然逻辑回归是一种简单的算法,但是它在实际应用中表现出了很好的效果,并且具有很强的可解释性,因此广受欢迎。

Sigmoid函数

优点:

实现简单,广泛的应用于工业问题上;分类时计算量非常小,速度很快,存储资源低;便利的观测样本概率分数;对逻辑回归而言,多重共线性并不是问题,它可以结合L2正则化来解决该问题;计算代价不高,易于理解和实现;

缺点:

当特征空间很大时,逻辑回归的性能不是很好;容易欠拟合,一般准确度不太高不能很好地处理大量多类特征或变量;只能处理两分类问题(在此基础上衍生出来的softmax可以用于多分类),且必须线性可分;对于非线性特征,需要进行转换;3、线性回归

线性回归是用于回归的,而不像Logistic回归是用于分类,其基本思想是用梯度下降法对最小二乘法形式的误差函数进行优化,当然也可以用normal equation直接求得参数的解,结果为:

优点:

建模速度快,不需要很复杂的计算,在数据量大的情况下依然运行速度很快。可以根据系数给出每个变量的理解和解释

缺点:不能很好地拟合非线性数据。所以需要先判断变量之间是否是线性关系

线性模型和非线性模型区别

线性模型是指可以用一个线性方程来描述的模型,其特点是变量之间的关系是线性的。例如,y=ax+b就是一个线性模型,其中y是因变量,x是自变量,a和b是常数。

非线性模型则不同,其特点是变量之间的关系不是线性的。例如,y=aexp(bx)就是一个非线性模型,其中y是因变量,x是自变量,a和b是常数,exp是指以e为底的指数函数。

多项式模型可以是线性模型也可以是非线性模型,具体取决于模型的形式。

如果多项式模型是指只有一个自变量的形式,例如y = a + bx + cx^2,则这个多项式模型就可以转化为y = a + bx1 + cx2的形式,其中x1 = x,x2 = x^2,这个模型就是一个线性模型。因为参数a、b、c之间的关系是线性的。

但是,如果多项式模型是指有多个自变量的形式,例如y = a + bx1 + cx2 + dx1x2,则这个多项式模型就不能简单地转化为线性模型的形式了,因为参数a、b、c、d之间的关系是非线性的。此时,需要使用非线性回归方法进行拟合。

因此,多项式模型可以是线性模型,也可以是非线性模型,具体取决于模型的形式。

非线性如何转化为线性

为什么在深度学习大杀四方的今天还使用线性回归呢?

一方面,线性回归所能够模拟的关系其实远不止线性关系。线性回归中的“线性”指的是系数的线性,而通过对特征的非线性变换,以及广义线性模型的推广,输出和特征之间的函数关系可以是高度非线性的。另一方面,也是更为重要的一点,线性模型的易解释性使得它在物理学、经济学、商学等领域中占据了难以取代的地位。

4、最近邻算法——KNN

KNN即最近邻算法,其主要过程为:

1. 计算训练样本和测试样本中每个样本点的距离(常见的距离度量有欧式距离,马氏距离等);2. 对上面所有的距离值进行排序;3. 选前k个最小距离的样本;4. 根据这k个样本的标签进行投票,得到最后的分类类别;

如何选择一个最佳的K值,这取决于数据。一般情况下,在分类时较大的K值能够减小噪声的影响。但会使类别之间的界限变得模糊。一个较好的K值可通过各种启发式技术来获取,比如,交叉验证。另外噪声和非相关性特征向量的存在会使K近邻算法的准确性减小。

近邻算法具有较强的一致性结果。随着数据趋于无限,算法保证错误率不会超过贝叶斯算法错误率的两倍。对于一些好的K值,K近邻保证错误率不会超过贝叶斯理论误差率。

KNN算法的优点

理论成熟,思想简单,既可以用来做分类也可以用来做回归;可用于非线性分类;训练时间复杂度为O(n);对数据没有假设,准确度高,对outlier不敏感;

缺点

计算量大;样本不平衡问题(即有些类别的样本数量很多,而其它样本的数量很少);需要大量的内存;5、决策树

决策树学习3步骤

特征选择:

决定了使用哪些特征来做判断。在训练数据集中,每个样本的属性可能有很多个,不同属性的作用有大有小。因而特征选择的作用就是筛选出跟分类结果相关性较高的特征,也就是分类能力较强的特征。

在特征选择中通常使用的准则是:信息增益。

决策树生成:

选择好特征后,就从根节点触发,对节点计算所有特征的信息增益,选择信息增益最大的特征作为节点特征,根据该特征的不同取值建立子节点;对每个子节点使用相同的方式生成新的子节点,直到信息增益很小或者没有特征可以选择为止。

剪枝:

剪枝的主要目的是对抗“过拟合”,通过主动去掉部分分支来降低过拟合的风险。

3种典型决策树算法

ID3 算法

ID3 是最早提出的决策树算法,他就是利用信息增益来选择特征的。

C4.5 算法

他是 ID3 的改进版,他不是直接使用信息增益,而是引入“信息增益比”指标作为特征的选择依据。

CART(Classification and Regression Tree)

这种算法即可以用于分类,也可以用于回归问题。CART 算法使用了基尼系数取代了信息熵模型。

优点

决策树易于理解和解释,可以可视化分析,容易提取出规则;可以同时处理标称型和数值型数据;比较适合处理有缺失属性的样本;能够处理不相关的特征;测试数据集时,运行速度比较快;在相对短的时间内能够对大型数据源做出可行且效果良好的结果。

缺点

容易发生过拟合(随机森林可以很大程度上减少过拟合);容易忽略数据集中属性的相互关联;对于那些各类别样本数量不一致的数据,在决策树中,进行属性划分时,不同的判定准则会带来不同的属性选择倾向;信息增益准则对可取数目较多的属性有所偏好(典型代表ID3算法),而增益率准则(CART)则对可取数目较少的属性有所偏好,但CART进行属性划分时候不再简单地直接利用增益率尽心划分,而是采用一种启发式规则)(只要是使用了信息增益,都有这个缺点,如RF)。ID3算法计算信息增益时结果偏向数值比较多的特征。6、SVM支持向量机

高准确率,为避免过拟合提供了很好的理论保证,而且就算数据在原特征空间线性不可分,只要给个合适的核函数,它就能运行得很好。在动辄超高维的文本分类问题中特别受欢迎。可惜内存消耗大,难以解释,运行和调参也有些烦人,而随机森林却刚好避开了这些缺点,比较实用。

支持向量机求解步骤:

确定核函数类型:一般常用的核函数有线性核函数、多项式核函数、高斯核函数等。计算核函数矩阵:对于给定的训练样本,可以通过核函数计算出样本之间的相似度,从而得到核函数矩阵。具体而言,对于训练样本 $x_i$ 和 $x_j$,它们的核函数值为 $K(x_i, x_j)$,则核函数矩阵 $K$ 的第 $i$ 行第 $j$ 列的元素为 $K_{i,j}=K(x_i, x_j)$。求解对偶问题:通过对偶问题求解得到 SVM 模型的参数,其中包括支持向量和拉格朗日乘子等。预测新样本的标签:对于一个新的样本 $x$,通过计算它与支持向量之间的核函数值,然后代入 SVM 模型进行分类。参数调优:对于不同的核函数类型和参数设置,可以采用交叉验证等方法来评估模型的性能并选择最优的参数组合。

增加核函数目的:

对于非线性的模型,我们需要:

使用非线性映射将数据投影至特征空间;在特征空间使用线性分类器;

看似很简单,但是我们在映射时,就会发现当变量增多时,映射到高维空间的维度是呈指数增长的,计算起来十分困难,这时候就需要核函数(kernel function)了。核函数也是将特征从低维到高维进行转换,但是它是先在低维上进行计算,实际的分类效果表现在高维上。这样,我们就避免了在高维上复杂的计算,仍得到相同的结果。 一些常用的核函数:多项式核、高斯核、线性核

对于线性不可分的数据集,需要使用某种核函数,可以是线性核函数、多项式核函数、高斯核函数和神经网络核函数等。这种采用核技巧(kernel trick)的处理方式可以将数据映射到一个更高纬的空间中,从而使得非线性关系会突然看起来是完全线性可分的,比如下图就形象地说明了这点:

对于核的选择也是有技巧的(libsvm中自带了四种核函数:线性核、多项式核、RBF以及sigmoid核):

第一,如果样本数量小于特征数,那么就没必要选择非线性核,简单的使用线性核就可以了;第二,如果样本数量大于特征数目,这时可以使用非线性核,将样本映射到更高维度,一般可以得到更好的结果;第三,如果样本数目和特征数目相等,该情况可以使用非线性核,原理和第二种一样。

对于第一种情况,也可以先对数据进行降维,然后使用非线性核,这也是一种方法。

SVR

SVR还是拟合一条线,尽可能的穿过所有点。

优点

可以解决高维问题,即大型特征空间;解决小样本下机器学习问题;能够处理非线性特征的相互作用;无局部极小值问题;(相对于神经网络等算法)无需依赖整个数据;泛化能力比较强;

缺点

当观测样本很多时,效率并不是很高;对非线性问题没有通用解决方案,有时候很难找到一个合适的核函数;对于核函数的高维映射解释力不强,尤其是径向基函数;常规SVM只支持二分类;对缺失数据敏感;7、K-Means聚类

关于K-Means聚类的文章《机器学习算法-K-means聚类》。关于K-Means的推导,里面有着很强大的EM思想。

优点

算法简单,容易实现 ;算法速度很快;对处理大数据集,该算法是相对可伸缩的和高效率的,因为它的复杂度大约是O(nkt),其中n是所有对象的数目,k是簇的数目,t是迭代的次数。通常k

具体过程:

从原始样本集中抽取训练集。每轮从原始样本集中使用Bootstraping的方法抽取n个训练样本(在训练集中,有些样本可能被多次抽取到,而有些样本可能一次都没有被抽中)。共进行k轮抽取,得到k个训练集。(k个训练集之间是相互独立的)每次使用一个训练集得到一个模型,k个训练集共得到k个模型。(注:这里并没有具体的分类算法或回归方法,我们可以根据具体问题采用不同的分类或回归方法,如决策树、感知器等)对分类问题:将上步得到的k个模型采用投票的方式得到分类结果;对回归问题,计算上述模型的均值作为最后的结果。(所有模型的重要性相同)

Bagging 的思路是所有基础模型都一致对待,每个基础模型手里都只有一票。然后使用民主投票的方式得到最终的结果。大部分情况下,经过 bagging 得到的结果方差(variance)更小

Boosting 的核心思路是——挑选精英。

Boosting 和 bagging 最本质的差别在于他对基础模型不是一致对待的,而是经过不停的考验和筛选来挑选出“精英”,然后给精英更多的投票权,表现不好的基础模型则给较少的投票权,然后综合所有人的投票得到最终结果。大部分情况下,经过 boosting 得到的结果偏差(bias)更小

具体过程:

通过加法模型将基础模型进行线性的组合。每一轮训练都提升那些错误率小的基础模型权重,同时减小错误率高的模型权重。在每一轮改变训练数据的权值或概率分布,通过提高那些在前一轮被弱分类器分错样例的权值,减小前一轮分对样例的权值,来使得分类器对误分的数据有较好的效果。

样本选择上:

Bagging:训练集是在原始集中有放回选取的,从原始集中选出的各轮训练集之间是独立的。

Boosting:每一轮的训练集不变,只是训练集中每个样例在分类器中的权重发生变化。而权值是根据上一轮的分类结果进行调整。

样例权重:

Bagging:使用均匀取样,每个样例的权重相等

Boosting:根据错误率不断调整样例的权值,错误率越大则权重越大。

预测函数:

Bagging:所有预测函数的权重相等。

Boosting:每个弱分类器都有相应的权重,对于分类误差小的分类器会有更大的权重。

并行计算:

Bagging:各个预测函数可以并行生成

Boosting:各个预测函数只能顺序生成,因为后一个模型参数需要前一轮模型的结果。

9、随机森林

过程

随机性

随机性有两个方面:数据的随机性选取,以及待选特征的随机选取

随机森林的随机性体现在每颗树的训练样本是随机的,树中每个节点的分裂属性集合也是随机选择确定的。有了这2个随机的保证,随机森林就不会产生过拟合的现象了。

随机分类分类和回归

所谓分类树就是面向分类的,每个决策树最末端的叶子结点出来的是一个分类标签,不是0就是1或者2等类别。回归树就是面向回归的,回归就是拟合函数一样,输出连续值,比如根据一大堆当天的特征输出明天的气温,气温是每个样本唯一输出的值,只不过输出的值根据特征的不一样输出值不一样而已,但是它们输出的意义是一样的,那就是都是气温。

优点

它可以出来很高维度(特征很多)的数据,并且不用降维,无需做特征选择它可以判断特征的重要程度可以判断出不同特征之间的相互影响不容易过拟合训练速度比较快,容易做成并行方法实现起来比较简单对于不平衡的数据集来说,它可以平衡误差。如果有很大一部分的特征遗失,仍可以维持准确度。

缺点

随机森林已经被证明在某些噪音较大的分类或回归问题上会过拟合。对于有不同取值的属性的数据,取值划分较多的属性会对随机森林产生更大的影响,所以随机森林在这种数据上产出的属性权值是不可信的10、Adaboosting

Adaboost是一种加和模型,每个模型都是基于上一次模型的错误率来建立的,过分关注分错的样本,而对正确分类的样本减少关注度,逐次迭代之后,可以得到一个相对较好的模型。是一种典型的boosting算法。下面是总结下它的优缺点。

AdaBoost算法优点:

很好的利用了弱分类器进行级联;可以将不同的分类算法作为弱分类器;AdaBoost具有很高的精度;相对于bagging算法和Random Forest算法,AdaBoost充分考虑的每个分类器的权重;

Adaboost算法缺点:

AdaBoost迭代次数也就是弱分类器数目不太好设定,可以使用交叉验证来进行确定;数据不平衡导致分类精度下降;训练比较耗时,每次重新选择当前分类器最好切分点;11、 人工神经网络的优缺点

人工神经网络的优点:

分类的准确度高;并行分布处理能力强,分布存储及学习能力强,对噪声神经有较强的鲁棒性和容错能力,能充分逼近复杂的非线性关系;具备联想记忆的功能。

人工神经网络的缺点:

神经网络需要大量的参数,如网络拓扑结构、权值和阈值的初始值;不能观察之间的学习过程,输出结果难以解释,会影响到结果的可信度和可接受程度;学习时间过长,甚至可能达不到学习的目的。算法选择参考

之前翻译过一些国外的文章,有一篇文章中给出了一个简单的算法选择技巧:

首当其冲应该选择的就是逻辑回归,如果它的效果不怎么样,那么可以将它的结果作为基准来参考,在基础上与其他算法进行比较;然后试试决策树(随机森林)看看是否可以大幅度提升你的模型性能。即便最后你并没有把它当做为最终模型,你也可以使用随机森林来移除噪声变量,做特征选择;如果特征的数量和观测样本特别多,那么当资源和时间充足时(这个前提很重要),使用SVM不失为一种选择。

通常情况下:【GBDT>=SVM>=RF>=Adaboost>=Other…】

算法固然重要,但好的数据却要优于好的算法,设计优良特征是大有裨益的。假如你有一个超大数据集,那么无论你使用哪种算法可能对分类性能都没太大影响(此时就可以根据速度和易用性来进行抉择)。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3